import requests
from lxml import etree
import chaojiying
from hashlib import md5
from chaojiying import Chaojiying_Client

def getCodeText(userName,password,appId,imgUrl):
    class Chaojiying_Client(object):

            def __init__(self, username, password, soft_id):
                self.username = username
                # password =  password.encode('utf8')
                self.password = md5(password.encode('utf-8')).hexdigest()
                self.soft_id = soft_id
                self.base_params = {
                    'user': self.username,
                    'pass2': self.password,
                    'softid': self.soft_id,
                }
                self.headers = {
                    'Connection': 'Keep-Alive',
                    'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
                }

            def PostPic(self, im, codetype):
                """
                im: 图片字节
                codetype: 题目类型 参考 http://www.chaojiying.com/price.html
                """
                params = {
                    'codetype': codetype,
                }
                params.update(self.base_params)
                files = {'userfile': ('ccc.jpg', im)}
                r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files,
                                  headers=self.headers)
                return r.json()

            def PostPic_base64(self, base64_str, codetype):
                """
                im: 图片字节
                codetype: 题目类型 参考 http://www.chaojiying.com/price.html
                """
                params = {
                    'codetype': codetype,
                    'file_base64': base64_str
                }
                params.update(self.base_params)
                r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, headers=self.headers)
                return r.json()

            def ReportError(self, im_id):
                """
                im_id:报错题目的图片ID
                """
                params = {
                    'id': im_id,
                }
                params.update(self.base_params)
                r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
                return r.json()
    if __name__ == '__main__':
        chaojiying = Chaojiying_Client('LYHwudi', 'qwertyuiop.', '938987')	#用户中心>>软件ID 生成一个替换 96001
        im = open('./img.jpg', 'rb').read()													#本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
        print(chaojiying.PostPic(im, 1902))
    return chaojiying.PostPic(im,1902)

# def getCodeText(imgPath,codeType):
#     chaojiying = Chaojiying_Client('LYHwudi', 'qwertyuiop.', '938987')  # 用户中心>>软件ID 生成一个替换 96001
#     im = open('./img.jpg', 'rb').read()
#     img_detail = chaojiying.PostPic(im,codeType)
#     return (img_detail)

#创建一个session对象
session = requests.session()

headers ={
        'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
    }
url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
page_text = session.get(url=url,headers=headers).text
tree = etree.HTML(page_text)
code_img_src = 'https://so.gushiwen.cn'+tree.xpath('//*[@id="imgCode"]/@src')[0]
code_img_data = requests.get(url=code_img_src,headers=headers).content

with open('./img.jpg','wb') as fp:
    fp.write(code_img_data)


result = getCodeText('LYHwudi', 'qwertyuiop.', '938987',r'D:\pythonProject\py4.requests模块高级')
#print(result)
# code_text = getCodeText('./img.jpg',1902)['pic_str']
# print('识别结果为：',code_text)

#im = open('codes.jpg', 'rb').read()  # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
#dic = chaojiying.PostPic(code_img_data,1902)
#verify_code = dic["pic_str"]
#print(dic)
#print(chaojiying.PostPic(im, 1902))

#post请求的发送
viewstate = tree.xpath('//*[@id="__VIEWSTATE"]/@value')[0]
print(viewstate)
login_url = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'
data = {
    '__VIEWSTATE': viewstate,
    '__VIEWSTATEGENERATOR': 'C93BE1AE',
    'from': 'http://so.gushiwen.cn/user/collect.aspx',
    'email': '1203098313@qq.com',
    'pwd': '199872lyh..',
    'code': result,
    'denglu': '登录',
}
#使用session进行post请求的发送
login_page_text = session.post(url=login_url,headers=headers,data=data).text
with open('gushi.html','w',encoding='utf-8') as fp:
    fp.write(login_page_text)

print('over!!!')